/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package viviendas;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.http.HttpServlet;
import javax.sql.DataSource;

/**
 * Clase conexion para conectar a la base de datos
 *
 * @author - Angela
 * @version - 1.0
 */
public class Conexion extends HttpServlet {

    private Connection conector;
    /**
     * Variable que contendra los mensajes de exito a mostrar al suario final
     */
    protected String successMessage = "";
    /**
     * Variable que contendra los mensajes de error a mostrar al suario final
     */
    protected String errorMessage = "";
    /**
     * Variable que contendra la pleca utilizada por el sistema
     */
    private String pleca = (System.getProperty("file.separator").equals("/")) ? "/" : "\\";

    /**
     * Metodo constructor que inicializa la conexion a la base de datos
     *
     * @author - Angela
     * @version - 1.0
     */
    public Conexion() {
        try {
            Context context = (Context) new InitialContext().lookup("java:comp/env");
            DataSource dataSource = (DataSource) context.lookup("jdbc/mysql");
            setConector(dataSource.getConnection());
            context.close();
        } catch (Exception ex) {
            System.out.println("Error en Conexion.java " + ex.getMessage());
        }
    }

    /**
     * Metodo para obtener una lista de resultados sql
     *
     * @author - Angela
     * @param sqlQuery
     * @return ResultSet
     * @throws SQLException
     */
    protected ResultSet executeQueryList(String sqlQuery) throws SQLException {
        return getConector().createStatement().executeQuery(sqlQuery);
    }

    /**
     * Metodo que obtiene un unico resultado sql
     *
     * @author - Angela
     * @param sqlQuery
     * @return ResultSet
     * @throws SQLException
     */
    protected ResultSet executeQuery(String sqlQuery) throws SQLException {
        return getConector().createStatement().executeQuery(sqlQuery);
    }

    /**
     * Metodo para insertar datos en la entidad declarada
     *
     * @author - Angela
     * @param sqlQuery - Objeto de tipo String
     * @return Integer - retorna el id del nuevo registro
     * @throws SQLException
     */
    protected Integer save(String sqlQuery) throws SQLException {
        Statement s = getConector().createStatement();
        s.executeUpdate(sqlQuery, Statement.RETURN_GENERATED_KEYS);
        ResultSet r = s.getGeneratedKeys();
        r.next();
        return r.getInt(1);
    }

    /**
     * Metodo para borrar datos en la entidad declarada
     *
     * @author - Angela
     * @param sqlQuery - Objeto de tipo String
     * @throws SQLException
     */
    protected void delete(String sqlQuery) throws SQLException {
        getConector().createStatement().executeUpdate(sqlQuery);
    }

    /**
     * Metodo para actualizar datos en la entidad declarada
     *
     * @author - Angela
     * @param sqlQuery - Objeto de tipo String
     * @throws SQLException
     */
    protected void update(String sqlQuery) throws SQLException {
        getConector().createStatement().executeUpdate(sqlQuery);
    }

    /**
     * Metodo para obtener la ruta real de la carpeta definida
     *
     * @author - Angela
     * @param dir - Objeto de tipo String
     * @return String - retorna la direccion de la ruta absoluta
     */
    protected String getDireccion(String dir) {
        return this.getServletContext().getRealPath(dir.replace("/", getPleca()).replace("\\", getPleca()));
    }

    /**
     * @return the conector
     */
    private Connection getConector() {
        return conector;
    }

    /**
     * @param conector the conector to set
     */
    private void setConector(Connection conector) {
        this.conector = conector;
    }

    /**
     * @return the successMessage
     */
    public String getSuccessMessage() {
        return successMessage;
    }

    /**
     * @param successMessage the successMessage to set
     */
    public void setSuccessMessage(String successMessage) {
        this.successMessage = successMessage;
    }

    /**
     * @return the errorMessage
     */
    public String getErrorMessage() {
        return errorMessage;
    }

    /**
     * @param errorMessage the errorMessage to set
     */
    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    /**
     * @return the pleca
     */
    public String getPleca() {
        return pleca;
    }

    /**
     * @param pleca the pleca to set
     */
    public void setPleca(String pleca) {
        this.pleca = pleca;
    }
}